// 上课跟着老师敲
// 泛型
function foo(msg:string|number):string|number{
    return  msg
}

// 可以简写为
//泛型的定义
function foo1<T>(msg:T):T{  //T代表着下面传的是什么类型，T就代表什么类型
    return  msg
}
foo1<number>(123)

//泛型定义多个参数
function foo2<T,U>(gread:T,num:U){
    console.log(gread);
    console.log(num);
    
}
foo2('1909b',36)  //这样的话 T的类型是字符串，U的类型是数字

let arr = [10,'hello']

// 交换数组元素
function foo3<T,U>(arr:[T,U]):[U,T]{
    return  [arr[1],arr[0]]
}
let arrs = foo3([10,'hello'])  //T代表number，U代表string，返回时，数组中的元素就会交换
console.log(arrs);


export {}